En la era digital, las redes sociales se han convertido en un campo de batalla para la información, donde la gran influencia de las celebridades podría ser aprovechada para sembrar división y debate.
Este proyecto investiga la dinámica de cómo los trolls en Twitter han utilizado a las figuras públicas prominentes, como Taylor Swift, Kanye West, Beyoncé, entre otros, durante eventos clave como las elecciones en EE.UU., con el fin de discernir las posibles intenciones detrás de estos tweets. Mediante un enfoque de análisis de texto y topic mining, se busca explorar los temas específicos alrededor de los cuales estos trolls generaron debate.
Iniciaremos ahora un análisis detallado para descubrir cómo se ha manejado la imagen de las celebridades e intentar desentrañar los objetivos subyacentes de tales estrategias.
Beyonce apoyando a Hillary Clinton
# Carga de paquetes esenciales para el análisis de texto
library(quanteda)
library(quanteda.textplots)
library(stringr)
library(quanteda.textstats)
library(tidyverse)
library(forcats)
library(tidytext)
library(ggplot2)
library(scales)
library(dplyr)
library(tidyr)
library(topicmodels)
library(wordcloud)
library(RColorBrewer)
# Opcional: Instalación de paquetes si es necesario
# install.packages("syuzhet")
# install.packages("textdata")
library(syuzhet)
library(textdata)
# Instalación de paquetes desde GitHub
# install.packages("devtools")
# devtools::install_github("kbenoit/quanteda.dictionaries")
# Establecimiento del directorio de trabajo
setwd("C:/Users/marib/Documents/UTad/Curso 3/BAI/Practica1/Tarea_1_Text_y_ topic_mining_sobre_trolls/Tarea_1_Mar_Iborra")
# Definición de la ruta a la carpeta con los ficheros CSV
ruta_ficheros <- "./russian-troll-tweets-master/"
mis_ficheros <- list.files(ruta_ficheros, pattern = "*.csv", full.names = TRUE)
# Inicialización del data frame que almacenará los datos consolidados
datos_twitter <- data.frame()
# Lectura y unión de todos los ficheros CSV
for (fichero in mis_ficheros) {
datos_temp <- read.csv(file = fichero, header = TRUE, sep = ",")
datos_twitter <- rbind(datos_twitter, datos_temp)
}
# Visualización del número de filas del data frame consolidado
print(nrow(datos_twitter))
## [1] 2946207
# Selección de columnas relevantes para el análisis
datos_twitter <- datos_twitter[, c("author", "content", "region", "language", "publish_date", "post_type", "account_type", "account_category")]
# Transformación de variables categóricas a factores
datos_twitter$region <- as.factor(datos_twitter$region)
datos_twitter$language <- as.factor(datos_twitter$language)
datos_twitter$post_type <- as.factor(datos_twitter$post_type)
datos_twitter$account_type <- as.factor(datos_twitter$account_type)
datos_twitter$account_category <- as.factor(datos_twitter$account_category)
# Conversión de la columna de fecha de publicación a formato de fecha
datos_twitter$publish_date <- as.Date(datos_twitter$publish_date, format = "%m/%d/%Y")
# Filtrado para conservar solo los tweets en inglés
datos_ingles <- subset(datos_twitter, language == "English")
# Limpieza del contenido de los tweets
datos_ingles$content <- gsub("(#\\w+)|(http\\S+)|(https\\S+)|(&)|(@\\w+)|(RT)|[^\\p{L}\\p{N}'\\s]", "", datos_ingles$content, perl = TRUE)
# Conversión del texto a minúsculas para homogeneizar el contenido
datos_ingles$content <- tolower(datos_ingles$content)
# Guardado del conjunto de datos filtrados y limpios para análisis posteriores
save(datos_ingles, file = "conjunto_datos/datos_ingles_filtrados.rda")
# Impresión de la cantidad de registros después de la limpieza
print(nrow(datos_ingles))
## [1] 2116867
load("conjunto_datos/datos_ingles_filtrados.rda")
En este segmento del análisis, nos enfocaremos en identificar palabras clave para filtrar y obtener tweets que mencionan a figuras públicas y celebridades involucradas en debates y polémicas de índole social y política.
# Expresión regular para incluir "celebrities" y sus sinónimos
terminos_relacionados <- "celebrities|celebs|famous|famous people|public figures"
# Buscar índices de los tweets que contienen los términos relacionados
indices <- grep(terminos_relacionados, datos_ingles$content, ignore.case = TRUE)
print(paste("Número total de tweets que contienen términos relacionados con 'celebridades':", length(indices)))
## [1] "Número total de tweets que contienen términos relacionados con 'celebridades': 3176"
# Mostrar los contenidos de los primeros 10 tweets encontrados
primeros_diez <- head(indices, n = 10)
tweets_seleccionados <- datos_ingles$content[primeros_diez]
print(tweets_seleccionados)
## [1] "this eminem freestyle proves that celebs still haven't learned that nobody cares what they have to say sad "
## [2] "the truth about puerto rico it's not the propaganda mayor of has been spewing wmsm cluless celebrities "
## [3] "by the way this is the now infamous librarian dressed as cat in the hat oh my this is some inapropriate stuff "
## [4] "the legendary correspondent charles wheelers famous report on the watts riots of 1965 "
## [5] "see the hottest spots in la where celebrities go to play book your tix "
## [6] "y'all favorite celebrities ain't ready to die for the rights and beliefs of black people they got too much to lose y y'all expect it"
## [7] "more celebrities to visit the white house "
## [8] " celebrities blame trump for the charlottesville attack "
## [9] " triggered celebs have meltdown look what they are claiming about trump "
## [10] "celebrities were 'orgasmic' when senate healthcare bill failed exclusive video "
Con un total de 3176 tweets que mencionan términos relacionados con ‘celebridades’, observamos cómo las figuras públicas se convierten en un foco dentro de la narrativa de los trolls en Twitter.
Los extractos mostrados cubren una gama de temas, desde críticas a celebridades por su activismo hasta eventos sociopolíticos específicos, reflejando lo que parece una estrategia para utilizar la influencia y visibilidad de estas figuras para llegar a más público.
A este conjunto, ampliaremos nuestra búsqueda para incluir menciones específicas de personas famosas que han sido figuras centrales en diversas controversias durante eventos cruciales. Este enfoque detallado nos permitirá analizar cómo ciertas celebridades fueron utilizadas para crear polémica, influir en la opinión pública o desviar la atención en momentos de significativa importancia política y social.
Algunas de las celebridades más influyentes fueron:
# Expresión regular para incluir términos relacionados
terminos_swift <- "taylor swift|swift|swifties|taylornation|taylor gang"
# Buscar índices de los tweets que contienen los términos relacionados
indices <- grep(terminos_swift, datos_ingles$content, ignore.case = TRUE)
# Imprimir el número total de tweets
print(paste("Número total de tweets que contienen términos relacionados con Taylor Swift:", length(indices)))
## [1] "Número total de tweets que contienen términos relacionados con Taylor Swift: 893"
# Mostrar los primeros 10 tweets encontrados
primeros_diez <- head(indices, n = 10)
tweets_seleccionados <- datos_ingles$content[primeros_diez]
print(tweets_seleccionados)
## [1] "taylor swift's transition into hillary clinton is almost complete"
## [2] "heres how celebrities have been reacting to the taylor swiftkim kardashian drama "
## [3] " a swift kick in the pants"
## [4] " ladyjustice2016 enjoy some swift justice for knife wielding migrant at the border of spain "
## [5] "hey taylor swift quit trolling david "
## [6] "more proof that taylor swift is the nicest woman in the world "
## [7] "taylor swift and hailey baldwin alleged feud heating up gigi hadid taking sides "
## [8] "celebs arguing rockettes shouldnt be forced to perform at inauguration swiftly exposed as total frauds "
## [9] "taylor swift and hailey baldwin alleged feud heating up gigi hadid taking sides "
## [10] "according to my calculations b² 4 a c b x12 2a swifties are tragic "
# Mostrar los tweets
taylor_seleccionados <- datos_ingles[indices, ]
View(taylor_seleccionados)
Taylor Swift se encontró en el centro de varias polémicas y discusiones políticas y sociales, marcando un período de transición en su carrera donde comenzó a involucrarse más abiertamente en temas de relevancia pública.
Estos tweets ilustran no solo el papel de Taylor Swift como objeto de discusión en debates políticos y sociales, sino también cómo su figura es utilizada para comentar sobre asuntos de importancia.
# Expresión regular para incluir términos relacionados
terminos_kanye <- "kanye|yeezy|kanye west"
# Buscar índices de los tweets que contienen los términos relacionados
indices <- grep(terminos_kanye, datos_ingles$content, ignore.case = TRUE)
# Imprimir el número total de tweets
print(paste("Número total de tweets que contienen términos relacionados con Kanye West:", length(indices)))
## [1] "Número total de tweets que contienen términos relacionados con Kanye West: 1284"
# Mostrar los primeros 10 tweets encontrados
primeros_diez <- head(indices, n = 10)
tweets_seleccionados <- datos_ingles$content[primeros_diez]
print(tweets_seleccionados)
## [1] "kanye west says he 'would have voted' for donald trump "
## [2] "social media diagnosed kanye with mental illness since when ya'll doctors that man might have bronchitis"
## [3] "praying for kanye praying he has the right energy surrounding him during this time sending peace and love "
## [4] "he pretty much said everything except kanye's name "
## [5] "inspiring topical as kanye allways does "
## [6] "rihanna joined kanye onstage after pretending to be a normal person "
## [7] "' closer to kanye's election weeeeeeeeeee'"
## [8] "kanye west finally releases new album get all the details "
## [9] "kanye did the millionaire equivalent of finally putting his inlaw's mixtape on in his car"
## [10] "there's nothing that makes kanye look more like a regular person than his dealings with his inlaws "
# Mostrar los tweets
kanye_seleccionados <- datos_ingles[indices, ]
View(kanye_seleccionados)
El conjunto de tweets relacionados con Kanye West, que asciende a 1284 menciones, refleja la complejidad de su figura pública y el impacto que tiene en diversas esferas, desde la música hasta la política y la salud mental. Un aspecto destacado es su expresión de apoyo a Donald Trump, lo cual provocó debates intensos sobre política, identidad y cultura. Esta declaración, al margen de sus implicaciones políticas, evidencia cómo las opiniones de las celebridades pueden resonar en el ámbito público, generando discusiones y polarización.
Por lo visto en clase y reflejado en diversos análisis, Beyoncé emerge repetidamente como una figura central en múltiples contextos y debates, por lo que también se le va a incluir en este análisis para ver como se uso para influir y crear debate.
# Expresión regular para incluir términos relacionados
terminos_beyonce <- "beyonc|beyonce|beyoncé|Bey hive"
# Buscar índices de los tweets que contienen los términos relacionados
indices <- grep(terminos_beyonce, datos_ingles$content, ignore.case = TRUE)
# Imprimir el número total de tweets
print(paste("Número total de tweets que contienen términos relacionados con Beyonce:", length(indices)))
## [1] "Número total de tweets que contienen términos relacionados con Beyonce: 2003"
# Mostrar los primeros 10 tweets encontrados
primeros_diez <- head(indices, n = 10)
tweets_seleccionados <- datos_ingles$content[primeros_diez]
print(tweets_seleccionados)
## [1] "you have the right to watch film police activities beyonce "
## [2] "beyonces dancers demand "
## [3] "this lemon is on steroids someone call beyonce "
## [4] "beyoncé is not some dead african spirit get a life"
## [5] "' i wanna have the odd photo with beyonce 2'"
## [6] "coupled up waka flocka shows pda with tammy rivera blames breakup on beyonce she pulled a solange in the "
## [7] "beyonce told us to go to red lobster to save money for them tour tickets "
## [8] "antiantibeyoncé protest growing still no antibeyoncé protest "
## [9] "beyoncé the way your not so subliminal message slayed "
## [10] " beyonce lowkey was paying homage to the late great michael jackson "
# Mostrar los tweets
beyonce_seleccionados <- datos_ingles[indices, ]
View(beyonce_seleccionados)
Los tweets relacionados con Beyoncé capturan una amplia gama de temas que reflejan tanto su impacto cultural como las diversas percepciones públicas sobre su figura. Desde la mención de sus actividades políticas y demandas sociales, especialmente su apoyo al movimiento Black Lives Matter y su participación activa en campañas por la igualdad de género, hasta referencias a su música y mensajes subliminales, Beyoncé es presentada como una figura de influencia significativa en diversos ámbitos. Su participación en eventos de gran envergadura, como las actuaciones en el Super Bowl y su visibilidad en campañas presidenciales, subraya su posición como una voz poderosa en el diálogo nacional sobre justicia social y política.
# Definir términos de búsqueda de celebridades
terminos_celebridades <- c("oprah", "jimmy fallon", "lady gaga", "colin kaepernick", "kendrick lamar",
"lebron james", "alicia keys", "ellen degeneres", "chris evans",
"serena williams", "janelle monáe", "dave chappelle", "emma watson",
"chance the rapper", "meryl streep", "angelina jolie", "eminem")
# Inicializar una lista para almacenar los índices de tweets
indices_tweets_celebridades <- integer(0)
# Función para buscar y almacenar índices de tweets de celebridades
buscar_y_almacenar_indices <- function(termino) {
indices <- grep(termino, datos_ingles$content, ignore.case = TRUE)
indices_tweets_celebridades <<- c(indices_tweets_celebridades, indices)
}
# Bucle para cada término de búsqueda de celebridades
for(termino in terminos_celebridades) {
buscar_y_almacenar_indices(termino)
}
# Eliminar índices duplicados
indices_tweets_celebridades <- unique(indices_tweets_celebridades)
# Subconjunto de datos basado en índices encontrados
tweets_filtrados <- datos_ingles[indices_tweets_celebridades, ]
# Mostrar subconjunto de datos filtrado
View(tweets_filtrados)
# Imprimir el número total de tweets filtrados
print(paste("Número total de tweets filtrados por menciones de celebridades:", length(indices_tweets_celebridades)))
## [1] "Número total de tweets filtrados por menciones de celebridades: 4726"
La elección de este tema surge de la comprensión de que las celebridades ejercen una influencia significativa en sus seguidores y en la sociedad en general. Su capacidad para alcanzar y movilizar grandes audiencias las convierte en figuras clave dentro del tejido social y cultural contemporáneo. La intención de este proyecto es examinar cómo se utilizaron sus imágenes y declaraciones dentro del contexto de polémicas y debates políticos e intentar ver cuales eran las intenciones detras de estos comentarios.
Vamos a reemplazar todas las apariciones de “Beyoncé” con “Beyonce” en el conjunto de datos. Ahora, cada mención de la artista se unificará bajo una sola ortografía sin tilde. Esto asegurará la consistencia al analizar o visualizar menciones de esta celebridad en los datos.
datos_ingles$content <- gsub("beyoncé", "beyonce", datos_ingles$content, fixed = TRUE)
# Palabras o frases similares a los términos de búsqueda que queremos excluir
palabras_eliminar <- c( "swiftly", "infamous", "celebration", "kanyes", "western")
# Función para eliminar las palabras específicas del contenido de los tweets
eliminar_palabras <- function(texto, palabras) {
# Construir la expresión regular para las palabras a eliminar
patron_eliminar <- paste(palabras_eliminar, collapse = "|")
# Reemplazar las ocurrencias de las palabras en el texto por una cadena vacía
texto_limpio <- gsub(patron_eliminar, "", texto, ignore.case = TRUE)
return(texto_limpio)
}
# Aplicamos la función para eliminar palabras específicas
datos_ingles$content <- sapply(datos_ingles$content, eliminar_palabras, palabras = palabras_eliminar)
# Actualizamos los términos de búsqueda para reflejar la unificación hecha
terminos_busqueda <- c("celebrities|celebs|famous|famous people|public figures",
"taylor swift|swift|swifties|taylornation|taylor gang",
"kanye|yeezy|kanye west",
"beyonc|beyonce|Bey hive",
"oprah", "jimmy fallon", "lady gaga", "colin kaepernick", "kendrick lamar",
"lebron james", "alicia keys", "ellen degeneres", "chris evans",
"serena williams", "janelle monáe", "dave chappelle", "emma watson",
"chance the rapper", "meryl streep", "angelina jolie", "eminem")
# Unificamos los términos de búsqueda en una sola expresión regular
terminos_busqueda_juntos <- paste(terminos_busqueda, collapse = "|")
# Filtramos el dataset para incluir solo tweets con los términos de búsqueda
datos_filtrados_celebridades <- subset(datos_ingles, grepl(terminos_busqueda_juntos, datos_ingles$content))
# Finalmente, guardamos el nuevo conjunto de datos filtrado y limpio
save(datos_filtrados_celebridades, file = "conjunto_datos/datos_filtrados_celebridades.rda")
# Inspeccionar la estructura del conjunto de datos filtrado
str(datos_filtrados_celebridades)
## 'data.frame': 11581 obs. of 8 variables:
## $ author : chr "10_GOP" "10_GOP" "10_GOP" "10_GOP" ...
## $ content : chr "this eminem freestyle proves that celebs still haven't learned that nobody cares what they have to say sad " "eminem is a trump supporter " "the truth about puerto rico it's not the propaganda mayor of has been spewing wmsm cluless celebrities " "cnn's ana navarro is spreading a photoshopped picture of lebron james to fan the flames of anti trump hate " ...
## $ region : Factor w/ 37 levels "","Afghanistan",..: 37 37 37 37 37 36 36 36 36 36 ...
## $ language : Factor w/ 56 levels "Albanian","Arabic",..: 10 10 10 10 10 10 10 10 10 10 ...
## $ publish_date : Date, format: "2017-10-11" "2017-10-12" ...
## $ post_type : Factor w/ 3 levels "","QUOTE_TWEET",..: 1 3 3 3 1 3 3 3 1 3 ...
## $ account_type : Factor w/ 19 levels "?","Arabic","Commercial",..: 14 14 14 14 14 14 10 10 10 10 ...
## $ account_category: Factor w/ 8 levels "Commercial","Fearmonger",..: 7 7 7 7 7 7 4 4 4 4 ...
# Resumen estadístico del conjunto de datos filtrado
summary(datos_filtrados_celebridades)
## author content region language
## Length:11581 Length:11581 United States :9985 English :11581
## Class :character Class :character Unknown :1519 Albanian : 0
## Mode :character Mode :character Azerbaijan : 22 Arabic : 0
## Iraq : 14 Bengali : 0
## United Kingdom: 12 Bulgarian: 0
## Canada : 7 Catalan : 0
## (Other) : 22 (Other) : 0
## publish_date post_type account_type account_category
## Min. :2014-11-27 :6545 Left :4286 LeftTroll :4286
## 1st Qu.:2016-04-22 QUOTE_TWEET: 40 Right :3475 RightTroll :3475
## Median :2016-11-08 RETWEET :4996 local :2119 NewsFeed :2480
## Mean :2016-09-30 Hashtager : 956 HashtagGamer: 956
## 3rd Qu.:2017-03-31 news : 361 Commercial : 154
## Max. :2018-05-13 Commercial: 154 NonEnglish : 121
## (Other) : 230 (Other) : 109
table(datos_filtrados_celebridades$account_category)
##
## Commercial Fearmonger HashtagGamer LeftTroll NewsFeed NonEnglish
## 154 61 956 4286 2480 121
## RightTroll Unknown
## 3475 48
El conjunto de datos refleja una amplia colección de 11,581 observaciones, detallando la actividad de cuentas específicamente designadas como trolls en Twitter, con una predominancia de publicaciones en inglés y centradas en Estados Unidos. La distribución temporal de las publicaciones, desde finales de 2014 hasta mediados de 2018, abarca un periodo crítico en el contexto político estadounidense, incluyendo las elecciones presidenciales de 2016 y sus secuelas. Este intervalo fue marcado por intensas divisiones políticas y sociales, donde figuras como Donald Trump y eventos como las protestas de derechos civiles jugaron papeles significativos.
Las categorías de cuentas más representadas —“LeftTroll”, “RightTroll”, y “NewsFeed”— sugieren una estrategia que podría estar dirigida a polarizar aún más el discurso político, mientras que “NewsFeed” podría estar dirigido a simular una cobertura mediática legítima, posiblemente para difundir o comentar eventos que celebraron figuras famosas.
view(datos_filtrados_celebridades)
View del conjunto de datos
View del conjunto de datos
View del conjunto de datos
View del conjunto de datos
Estos son algunos ejemples de los temas más discutidos durante el período de 2016 a 2019. Aunque se comentan muchos más temas y se profundizará en estos aspectos en futuras secciones del estudio, esta visión preliminar ofrece una idea de la naturaleza multifacética y de la amplitud del discurso en las redes sociales durante ese tiempo. Estos ejemplos resaltan la complejidad del entorno de la información y cómo diversos temas, que van desde la política y elecciones hasta cuestiones sociales y raciales, son discutidos en los tweets.
Estos datos iniciales sugieren cómo las figuras públicas y eventos actuales parecen ser usados por los trolls para influir en la opinión pública y tal vez usarlos para provocar división, aunque este es solo un primer vistazo, A continuacón procedemos a hacer un análisis más exhaustivo sobre la profundidad de estas actividades.
load("conjunto_datos/datos_filtrados_celebridades.rda")
# Eliminación de stop words
datos_limpieza_celebridades <- datos_filtrados_celebridades %>%
unnest_tokens(word, content) %>%
mutate(word = str_replace_all(word, "'s$", "")) %>%
anti_join(stop_words, by = "word") %>%
filter(str_detect(word, "^[a-z]+$")) %>%
group_by(account_category, language, author, publish_date, region, post_type) %>%
summarise(content = paste(word, collapse = " ")) %>%
ungroup()
# Guardar el conjunto de datos después de eliminar stop words
save(datos_limpieza_celebridades, file = "conjunto_datos/datos_limpieza_celebridades.rda")
view(datos_limpieza_celebridades)
# Crear tokens del corpus
tokens_celebridades <- quanteda::tokens(datos_limpieza_celebridades$content,
remove_numbers = TRUE,
remove_punct = TRUE,
remove_symbols = TRUE,
remove_separators = TRUE,
remove_url = TRUE) %>%
tokens_select(pattern = stopwords("en"), selection = "remove")
# Crear una matriz de términos documentales
dfm_celebridades <- dfm(tokens_celebridades)
# Generar frecuencias de tokens para todos los grupos
freqs <- textstat_frequency(dfm_celebridades,
n = 7,
groups = datos_limpieza_celebridades$account_category)
# Generar gráfico con ggplot
g1 <- ggplot(data = freqs,
aes(x = feature,
y = frequency,
fill = group)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(x = "Token", y = "Frecuencia", fill = "Categoría de Cuenta") +
ggtitle("Frecuencia de Tokens por Categoría de Cuenta")
# Visualizar gráfico
print(g1)
# Guardar gráfico
ggsave("imagenes/frecuencia_tokens_todas_categorias.png", g1, width = 10, height = 7)
freqs <- textstat_frequency(dfm_celebridades,
n = 12,
groups = datos_limpieza_celebridades$account_category)
interesantes <- c("LeftTroll", "RightTroll", "NewsFeed")
# Filtramos los datos para incluir solo las categorías de interés
freqs_interes <- freqs %>% filter(group %in% interesantes)
# Creamos el gráfico de barras ordenando los tokens por frecuencia
g2 <- ggplot(data = freqs_interes,
aes(x = fct_reorder(feature, frequency),
y = frequency,
fill = group)) +
geom_bar(stat = "identity") +
coord_flip() +
labs(x = "Token", y = "Frecuencia", fill = "Categoría de Cuenta") +
theme_minimal() +
theme(legend.position = "bottom")
# Mostramos el gráfico
print(g2)
# Guardar el gráfico
ggsave("imagenes/frecuencia_tokens_categorias_interes.png", g2, width = 10, height = 7)
La visualización de la frecuencia de tokens por categoría de cuenta revela patrones en el discurso en Twitter que pueden estar relacionados con las tácticas de los trolls durante un período marcado por eventos políticos significativos.
Los “LeftTroll” mencionan frecuentemente a “beyonce”, lo que podría estar vinculado a su influencia cultural y sus posturas sobre temas de justicia social, que a menudo resuenan con el público progresista. La palabra “black” también destaca en esta categoría, posiblemente debido al debate en torno al movimiento Black Lives Matter y otras discusiones raciales importantes de la época. “Kanye” aparece principalmente en las menciones de los “LeftTroll”. Esto puede reflejar la controversia que generó su apoyo a Donald Trump, una postura que sorprendió y dividió a sus seguidores.
En contraste, “taylor” y “swift” son más prominentes en “NewsFeed” y entre los “RightTroll”, lo que puede deberse a la creciente politización de Taylor Swift y su implicación en asuntos políticos, como el apoyo a la igualdad de género y la crítica a las políticas de Trump. “Eminem” también es más mencionado por los “RightTroll”, tal vez como respuesta a sus comentarios críticos hacia Trump y su administración.
Los tokens “president”, “presidential” y “trump” son clave en esta visualización, reflejando el intenso debate político de la época. Muchas celebridades tomaron posturas políticas claras durante las elecciones, lo que podría haber amplificado su presencia en las discusiones en línea.
En general, estos datos podrían sugerir que las figuras públicas con influencia política y cultural son herramientas poderosas en la estrategia de los trolls para influir en el discurso público, lo que resalta la intersección entre la cultura pop y la política en las tácticas de manipulación de opinión pública.
# Filtrado de Tweets por Fecha y Categoría:
interesantes <- c("LeftTroll", "RightTroll", "NewsFeed")
tweets_para_dibujo <- datos_limpieza_celebridades %>%
filter(publish_date > as.Date("2014-01-01") &
account_category %in% interesantes)
nrow(tweets_para_dibujo)
## [1] 7866
g3 <- ggplot(tweets_para_dibujo,
aes(x = publish_date,
fill = account_category)) +
geom_histogram(position = "identity",
bins = 20,
show.legend = FALSE) +
facet_wrap(~account_category, ncol = 1)
# Mostrar el gráfico
print(g3)
# Guardar el gráfico en un archivo PNG
ggsave("imagenes/tendencias_temporales_rightleft_troll.png", g3, width = 10, height = 7)
El gráfico revela tendencias interesantes en cuanto a la actividad en Twitter de cuentas clasificadas como LeftTroll, RightTroll y NewsFeed a lo largo del tiempo.
Para las cuentas de LeftTroll, hay un notable incremento en la actividad hacia mediados de 2016, que llega a su cumbre a finales de ese año, coincidiendo posiblemente con la campaña y elecciones presidenciales en Estados Unidos, un evento que suele generar considerable debate y movilización en redes sociales.
El pico en la actividad de las cuentas de RightTroll hacia finales de 2017 puede estar vinculado a varios eventos significativos, incluyendo las discusiones sobre la reforma tributaria en Estados Unidos, diversas políticas ejecutivas y posiblemente las secuelas de la respuesta a los sucesos de Charlottesville en agosto de ese año. Durante este periodo, los movimientos sociales y políticos a menudo estaban en el centro de atención, lo que probablemente contribuyó a la creciente actividad en las plataformas sociales por parte de estas cuentas.
Por otro lado, las cuentas categorizadas como NewsFeed mantienen una frecuencia de publicaciones más uniforme y baja a lo largo del tiempo, lo que podría indicar una estrategia de difusión constante de contenido.
# Eliminación de Retweets y Conteo de Palabras
tweets_para_dibujo <- datos_limpieza_celebridades %>%
filter(!str_detect(content, "^RT"))
nrow(tweets_para_dibujo)
## [1] 8906
# Procesamiento de los tweets para análisis de palabras
twitter_words <- tweets_para_dibujo %>%
unnest_tokens(word, content) %>%
count(account_category, word, sort = TRUE)
# Calcular el total de palabras por categoría de cuenta
total_words <- twitter_words %>%
group_by(account_category) %>%
summarize(total = sum(n))
# Unir los totales con las frecuencias de palabras
twitter_words <- left_join(twitter_words, total_words, by = "account_category")
# Cálculo de TF-IDF
tweet_tf_idf <- twitter_words %>%
bind_tf_idf(word, account_category, n)
tweet_tf_idf %>%
select(-total) %>%
arrange(desc(tf_idf))
# Análisis de la Ley de Zipf
freq_by_rank <- twitter_words %>%
group_by(account_category) %>%
mutate(rank = row_number(), term_frequency = n/total) %>%
ungroup()
zipf <- lm(log10(term_frequency) ~ log10(rank), data = freq_by_rank)
summary(zipf)
##
## Call:
## lm(formula = log10(term_frequency) ~ log10(rank), data = freq_by_rank)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.93553 -0.06350 0.00275 0.05807 0.57219
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.710662 0.005290 -134.3 <2e-16 ***
## log10(rank) -1.022392 0.001656 -617.4 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1187 on 17089 degrees of freedom
## Multiple R-squared: 0.9571, Adjusted R-squared: 0.9571
## F-statistic: 3.812e+05 on 1 and 17089 DF, p-value: < 2.2e-16
El modelo de regresión aplicado para analizar la Ley de Zipf muestra una fuerte correlación negativa entre la frecuencia de los términos y su rango de frecuencia, como se esperaría según la ley. El valor de R-squared es extremadamente alto (0.9571), indicando que el modelo se ajusta muy bien a los datos y que la relación entre la frecuencia de términos y su rango sigue muy de cerca la distribución prevista por la Ley de Zipf. Esto significa que los términos más comunes son utilizados con mucha más frecuencia que los menos comunes, en una proporción predecible.
# Visualización incluyendo la línea de ajuste de Zipf y leyenda de categorías
g_zipf <- freq_by_rank %>%
ggplot(aes(x = rank, y = term_frequency, color = account_category)) +
geom_abline(intercept = coef(zipf)[1], slope = coef(zipf)[2], color = "gray50", linetype = 2) +
geom_line(linewidth = 1.1, alpha = 0.8) +
scale_x_log10() +
scale_y_log10() +
theme_minimal() +
labs(color = "Categoría de Cuenta")
# Mostrar el gráfico
print(g_zipf)
ggsave("imagenes/ley_zipf_con_leyenda.png", g_zipf, width = 10, height = 7)
El gráfico ilustra la relación entre la frecuencia de términos y su rango en una escala logarítmica, comparando diferentes categorías de cuentas de Twitter. La línea de puntos representa la relación esperada según la Ley de Zipf. Cada categoría de cuenta sigue una tendencia similar, donde los términos más frecuentes tienen un rango bajo y su frecuencia disminuye rápidamente a medida que el rango aumenta. Esto es típico de una distribución lingüística natural donde unas pocas palabras son muy comunes, y muchas son raras. La adherencia cercana de los datos a la línea de Zipf sugiere que, independientemente de la categoría de la cuenta, el uso de palabras en Twitter sigue patrones comunes de comunicación humana.
En el gráfico, las categorías como ‘Unknown’ y ‘NonEnglish’ pueden mostrar líneas más cortas debido a un conjunto de datos más pequeño, lo que significa que hay menos palabras únicas en esas categorías, o que las palabras no se repiten con tanta frecuencia como en otras categorías, llevando a un corte más rápido en la representación de la ley de Zipf.
# Filtrado de Palabras y Cálculo de Frecuencia Relativa
datos_filtrados_celebridades %>%
unnest_tokens(word, content) %>%
filter(!word %in% stop_words$word,
!word %in% str_remove_all(stop_words$word, "'"),
str_detect(word, "[a-z]")) -> tokens_celebridades
frequency <- tokens_celebridades %>%
count(account_category, word, sort = TRUE) %>%
left_join(tokens_celebridades %>%
count(account_category, name = "total"), by = "account_category") %>%
mutate(freq = n / total)
head(frequency)
# Preparación para Comparación de Frecuencias
frequency_para_plot <- frequency %>%
filter(account_category %in% c("RightTroll", "LeftTroll"))
frequency_para_plot <- frequency_para_plot %>%
select(account_category, word, freq) %>%
pivot_wider(names_from = account_category, values_from = freq) %>%
arrange(RightTroll, LeftTroll)
umbral_right_troll <- quantile(frequency_para_plot$RightTroll, probs = 0.5, na.rm = TRUE) * 10000000
umbral_left_troll <- quantile(frequency_para_plot$LeftTroll, probs = 0.5, na.rm = TRUE) * 10000000
print(paste("Umbral RightTroll:", umbral_right_troll))
## [1] "Umbral RightTroll: 392.356887825166"
print(paste("Umbral LeftTroll:", umbral_left_troll))
## [1] "Umbral LeftTroll: 646.266197046564"
Los umbrales calculados representan un punto de corte para seleccionar las palabras más representativas de cada categoría de cuentas de trolls. Para la categoría “RightTroll”, el umbral es aproximadamente 392, lo que indica que solo se considerarán las palabras que aparezcan más de esta cantidad en la transformación logarítmica aplicada. Para “LeftTroll”, el umbral es aproximadamente 646, un número mayor que refleja una frecuencia más alta de palabras clave o más comunes en esta categoría.
Estos valores sugieren que las palabras en la categoría “LeftTroll” tienden a concentrarse en torno a un grupo más pequeño de palabras comunes, mientras que las de “RightTroll” están más dispersas entre una variedad más amplia de palabras. Esto podría indicar diferencias en la forma en que cada grupo enfoca sus mensajes o en la diversidad de temas que abordan.
# Seleccionar palabras que superen el umbral en ambas categorías
frequency_para_plot_2 <- frequency_para_plot %>%
filter((RightTroll * 1e7 > umbral_right_troll) & (LeftTroll * 1e7 > umbral_left_troll))
# Visualización de la Comparación de Frecuencias
ggplot(frequency_para_plot_2, aes(x = RightTroll, y = LeftTroll)) +
geom_jitter(alpha = 0.1, size = 2.5, width = 0.25, height = 0.25) +
geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
scale_x_log10(labels = percent_format()) +
scale_y_log10(labels = percent_format()) +
geom_abline(color = "red") +
labs(x = "Frecuencia en RightTroll (log)", y = "Frecuencia en LeftTroll (log)", title = "Comparación de Frecuencia de Palabras: RightTroll vs. LeftTroll") +
theme_minimal()
La gráfica muestra un diagrama de dispersión comparando la frecuencia de palabras entre las cuentas clasificadas como RightTroll y LeftTroll en una escala logarítmica. Los puntos representan palabras individuales, situados según su frecuencia relativa en los tweets de cada categoría.
Las palabras que se encuentran más cercanas a la línea roja diagonal tienen una frecuencia similar entre las dos categorías, indicando que son comúnmente utilizadas por ambos grupos, como “woman”, “lebron”, “kaepernick”, “america”.
Las palabras que se desvían de la línea roja muestran una tendencia a ser más frecuentes en una categoría que en la otra. Por ejemplo:
Palabras como “beyonce” y “black”, que predominan en el eje de LeftTroll, sugieren una mayor tendencia de estas cuentas a enfocarse en temas de identidad y justicia social. Kanye West, identificado aquí como “kanye”, también aparece en este segmento, posiblemente reflejando discusiones sobre sus declaraciones políticas y sociales controvertidas.
En contraste, términos como “meryl” y “taylor” en el eje de RightTroll podrían indicar que este grupo dirige su atención a criticar o discutir sobre celebridades que han tomado posiciones públicas que son percibidas como contrarias a sus valores conservadores.
Las diferencias en la frecuencia de palabras sugieren que, aunque hay temas comunes que ambos grupos discuten, la manera y el contexto en que se abordan estos temas varían.
# Cálculo y Visualización de Log Odds Ratios
word_ratios <- tokens_celebridades %>%
filter(!str_detect(word, "^@")) %>%
filter(account_category %in% c("LeftTroll", "RightTroll")) %>%
count(word, account_category) %>%
group_by(word) %>%
filter(n >= 100) %>%
ungroup() %>%
pivot_wider(names_from = account_category, values_from = n, values_fill = list(n = 0)) %>%
mutate(across(c(LeftTroll, RightTroll), ~(. + 1) / (sum(.) + 1))) %>%
mutate(logratio = log(RightTroll / LeftTroll)) %>%
arrange(desc(logratio))
word_ratios %>%
group_by(logratio < 0) %>%
slice_max(abs(logratio), n = 30) %>%
ungroup() %>%
mutate(word = reorder(word, logratio)) %>%
ggplot(aes(x = word, y = logratio, fill = logratio < 0)) +
geom_col(show.legend = FALSE) +
coord_flip() +
labs(y = "log odds ratio (Right/Left)", x = NULL) +
scale_fill_manual(name = "", values = c("blue", "red"), labels = c("Left", "Right")) +
theme_minimal()
Observamos que términos relacionados con figuras y temáticas políticas, como “eminem” y “antitrump”, se inclinan hacia LeftTroll. Esto sugiere que dichas cuentas podrían centrarse en discusiones anti-Trump, posiblemente debido a la naturaleza progresista o liberal asociada con estas figuras o temáticas.
En contraste, palabras como “trump”, “celebs”, y “taylor” muestran una mayor asociación con RightTroll, lo que podría reflejar una tendencia a discutir o apoyar a Donald Trump y criticar a las celebridades que se oponen a él, como Taylor Swift.
Es importante destacar que la presencia de palabras como “kanye”, “west”, y “kaepernick” en la categoría de LeftTroll, y “beyonce”, “hillary”, y “black” en RightTroll, señala cómo los temas de raza, política y figuras públicas son abordados diferencialmente por cada grupo.
Dada la prevalencia de las categorías LeftTroll y
RightTroll en el conjunto de datos, a continuación, nos
centraremos en analizar y discutir en profundidad estas dos etiquetas
para comprender mejor las estrategias y motivaciones subyacentes.
load("conjunto_datos/datos_limpieza_celebridades.rda")
# Seleccionar solo los tweets de la categoría "LeftTroll"
datos_left_troll <- subset(datos_limpieza_celebridades, account_category == "LeftTroll")
save(datos_left_troll,file = "conjunto_datos/datos_left_troll.rda")
# Crear el corpus para LeftTroll
corpus_left_troll <- quanteda::corpus(datos_left_troll$content)
# Asignar metadatos al corpus
docvars(corpus_left_troll, "account_category") <- datos_left_troll$account_category
docvars(corpus_left_troll, "language") <- datos_left_troll$language
docvars(corpus_left_troll, "publish_date") <- datos_left_troll$publish_date
docvars(corpus_left_troll, "author") <- datos_left_troll$author
docvars(corpus_left_troll, "region") <- datos_left_troll$region
docvars(corpus_left_troll, "post_type") <- datos_left_troll$post_type
# Crear tokens del corpus
tokens_left_troll <- quanteda::tokens(corpus_left_troll,
remove_numbers = TRUE,
remove_punct = TRUE,
remove_symbols = TRUE,
remove_separators = TRUE,
remove_url = TRUE)
# Eliminar stopwords
tokens_left_troll <- tokens_select(tokens_left_troll,
pattern = stopwords("en"),
selection = "remove")
# Crear una matriz de términos documentales
dfm_left_troll <- dfm(tokens_left_troll)
# Analizar las palabras más frecuentes
top_words_left_troll <- topfeatures(dfm_left_troll, 100)
print(top_words_left_troll)
## beyonce kanye colin black kaepernick famous
## 1342 524 386 378 371 353
## kendrick west lamar chance celebrities rapper
## 271 258 245 208 207 207
## trump williams serena james lebron people
## 188 168 152 151 149 140
## oprah tour swift celebs world white
## 134 130 112 107 105 104
## taylor music video album women playing
## 101 100 98 96 95 93
## ft lady jay watch love dave
## 89 83 83 82 81 76
## dancers game time natural hair president
## 73 73 68 68 66 65
## kid chappelle super police feat keys
## 65 62 62 60 58 57
## bowl donald gaga alicia america panthers
## 57 56 56 56 56 56
## day drake lil protest told kim
## 56 55 55 54 54 54
## eminem obama support party dex song
## 54 53 52 52 51 50
## gt halftime chris money tonight save
## 50 50 50 49 48 47
## kardashian announced meryl american damn free
## 47 46 45 45 44 43
## woman dressed listen red tickets coming
## 43 42 42 41 41 41
## panther performance week country streep forget
## 41 41 41 40 39 39
## martin distraction formation tax yeezy water
## 39 39 39 38 38 38
## post speech life lobster
## 38 38 37 37
# Generar y guardar una nube de palabras para las palabras más frecuentes
png(filename="imagenes/left_troll_wordcloud_1.png", width=3000, height=3000, bg = "black")
set.seed(100)
textplot_wordcloud(dfm_left_troll,
min_count = 10,
random_order = FALSE,
rotation = 0.25,
color = RColorBrewer::brewer.pal(8, "Set3"),
background = "black")
dev.off()
## png
## 2
left_troll_wordcloud_1
La frecuencia de palabras encontradas en el análisis de unigramas de la categoría “LeftTroll” revela una selección de términos altamente relevante para entender las dinámicas de discusión y los temas predominantes impulsados por los trolls, especialmente en el contexto de eventos políticos y sociales claves entre 2016 y 2018, que era donde más tweets se habían publicado como vimos en el punto 3.4.
Beyoncé se posiciona en la cima con 1342 menciones, lo que subraya su papel como figura central en el debate político y social. Su activismo, especialmente en relación con los derechos de las mujeres y el movimiento Black Lives Matter, junto con su influencia cultural masiva, la convierten en una figura emblemática para ser utilizada en discursos que buscan resonar o movilizar opiniones en la esfera pública.
Kanye West y Colin Kaepernick siguen en frecuencia de menciones con 524 y 386 respectivamente, indicando su relevancia en las discusiones impulsadas por estos actores. La controversia generada por Kanye West debido a sus declaraciones políticas, incluido su apoyo a Donald Trump, y la protesta de Colin Kaepernick contra la injusticia racial al arrodillarse durante el himno nacional de EE. UU., son eventos que indudablemente marcaron puntos de inflexión en el discurso público, proporcionando a los trolls un contenido rico para explotar y amplificar.
La presencia de palabras como black, famous, y trump dentro de los términos más frecuentes refleja no solo la focalización en la identidad racial y la celebridad, sino también la polarización política.
La inclusión de president junto con trump destaca el enfoque significativo en la política y, en particular, en la figura de Donald Trump. Dada la temporalidad del dataset, que incluye las elecciones presidenciales de 2016 en EE. UU. y sus secuelas, no es sorprendente ver estos términos dominando el discurso. Resaltan cómo las figuras públicas y los eventos políticos se entrelazan en la estrategia de los trolls para, seguramente, influir en el discurso público.
# Crear bigramas
tokens_bigrams_left_troll <- tokens_ngrams(tokens_left_troll, n = 2)
# Crear una matriz de términos documentales para bigramas
dfm_bigrams_left_troll <- dfm(tokens_bigrams_left_troll)
# Analizar las palabras más frecuentes en bigramas
top_bigrams_left_troll <- topfeatures(dfm_bigrams_left_troll, 100)
print(top_bigrams_left_troll)
## colin_kaepernick kanye_west kendrick_lamar
## 367 246 245
## chance_rapper serena_williams lebron_james
## 192 149 141
## taylor_swift dave_chappelle lady_gaga
## 83 62 56
## alicia_keys women_natural hair_beyonce
## 56 56 56
## super_bowl natural_hair famous_dex
## 56 55 51
## beyonce_black black_panthers donald_trump
## 47 44 43
## beyonce_told beyonce_dancers black_panther
## 43 43 41
## meryl_streep kid_kendrick announced_tour
## 39 38 38
## red_lobster told_red lobster_save
## 37 36 36
## save_money money_tour tour_tickets
## 36 36 36
## world_tour kim_kardashian beyonce_jay
## 36 36 31
## dancers_dressed dressed_black oprah_winfrey
## 30 30 30
## black_celebrities beyonce_halftime tax_returns
## 30 29 28
## water_flint lil_wayne halftime_distraction
## 28 28 28
## distraction_notice notice_game game_fixed
## 28 28 28
## beyonce_announced tour_forget forget_water
## 27 27 27
## panther_party police_brutality party_super
## 26 25 25
## michael_jackson beyonce_brought beyonce_backup
## 24 24 24
## backup_dancers dancers_black ft_lil
## 24 24 24
## hillary_clinton chris_martin brought_music
## 23 23 23
## music_people people_fit fit_love
## 23 23 23
## love_bit beyonce_coming ft_kendrick
## 23 22 22
## playing_famous paying_homage running_president
## 22 21 21
## beyonce_beyonce type_beat dj_khaled
## 21 20 19
## black_celebs lol_beyonce beyonce_lowkey
## 19 19 18
## lowkey_paying homage_late late_michael
## 18 18 18
## black_people jimmy_fallon beyonce_formation
## 18 18 18
## coming_tax tour_commercial commercial_super
## 17 17 17
## bowl_sunday sunday_beyonce beyonce_running
## 17 17 17
## president_fired fired_management management_team
## 17 17 17
## team_campaign campaign_staff kardashian_kanye
## 17 17 17
## beyonce_fell fell_bitches bitches_trippin
## 17 17 17
## national_anthem jay_beyonce world_famous
## 17 16 16
## ellen_degeneres
## 16
# Generar y guardar una nube de palabras para las palabras más frecuentes
set.seed(100)
png(filename="imagenes/left_troll_wordcloud_2.png", width=3000, height=3000, bg = "black")
textplot_wordcloud(dfm_bigrams_left_troll,
min_count = 10,
random_order = FALSE,
rotation = 0.25,
color = RColorBrewer::brewer.pal(8, "Set3"),
background = "black")
dev.off()
## png
## 2
left_troll_wordcloud_2
El análisis de bigramas para la categoría “LeftTroll” arroja luz sobre combinaciones de palabras que profundizan nuestro entendimiento sobre los temas específicos y las figuras públicas que dominaron el discurso de estos actores en Twitter. Al examinar estos bigramas, se revela una estructura más compleja y dirigida del contenido diseminado por los trolls.
Colin Kaepernick y Kanye West emergen nuevamente con 367 y 246 menciones respectivamente, esta vez en combinación con sus nombres completos, reiterando su papel central en las controversias políticas y sociales.
Las menciones a Serena Williams, LeBron James, y Taylor Swift indican cómo los logros, las posiciones políticas y la influencia social de estas celebridades son utilizados para tejer narrativas específicas o para comentar sobre temas de relevancia cultural y social.
Los bigramas “super bowl”, “natural hair”, y “black panthers” apuntan a eventos culturales significativos y temas de identidad racial.
Por último, la presencia de bigramas que combinan el nombre de Beyoncé con varios términos (“hair beyonce”, “beyonce black”, “beyonce told”) ilustra cómo se le atribuye un papel multifacético en el discurso, desde símbolo de empoderamiento hasta agente de cambio social.
# Seleccionar solo los tweets de la categoría "RightTroll"
datos_right_troll <- subset(datos_limpieza_celebridades, account_category == "RightTroll")
# Guardar el subconjunto para análisis futuro
save(datos_right_troll, file = "conjunto_datos/datos_right_troll.rda")
# Crear el corpus para RightTroll
corpus_right_troll <- quanteda::corpus(datos_right_troll$content)
# Asignar metadatos al corpus
docvars(corpus_right_troll, "account_category") <- datos_right_troll$account_category
docvars(corpus_right_troll, "language") <- datos_right_troll$language
docvars(corpus_right_troll, "publish_date") <- datos_right_troll$publish_date
docvars(corpus_right_troll, "author") <- datos_right_troll$author
docvars(corpus_right_troll, "region") <- datos_right_troll$region
docvars(corpus_right_troll, "post_type") <- datos_right_troll$post_type
# Crear tokens del corpus
tokens_right_troll <- quanteda::tokens(corpus_right_troll,
remove_numbers = TRUE,
remove_punct = TRUE,
remove_symbols = TRUE,
remove_separators = TRUE,
remove_url = TRUE) %>%
tokens_select(pattern = stopwords("en"), selection = "remove")
# Eliminar stopwords
tokens_right_troll <- tokens_select(tokens_right_troll,
pattern = stopwords("en"),
selection = "remove")
# Crear una matriz de términos documentales
dfm_right_troll <- dfm(tokens_right_troll)
# Analizar las palabras más frecuentes
top_words_right_troll <- topfeatures(dfm_right_troll, 100)
print(top_words_right_troll)
## trump celebrities celebs colin famous
## 643 459 422 416 404
## kaepernick eminem swift west james
## 401 253 227 219 217
## kanye lebron antitrump video meryl
## 191 190 174 170 159
## streep beyonce jimmy lady fallon
## 145 137 135 134 133
## president taylor oprah gaga hollywood
## 130 128 128 125 119
## breaking lol calls people black
## 113 103 97 96 93
## remain silent unloads news women
## 87 86 86 86 86
## obama wow allen attack weinstein
## 86 83 82 81 75
## blame charlottesville triggered world destroys
## 73 72 72 72 72
## meltdown claiming trumps hillary love
## 70 70 70 69 64
## kaepernicks singer lives response tweet
## 63 61 57 57 57
## rant kill claims donald woman
## 57 56 56 54 53
## perfect play jr praises lyrics
## 53 53 53 52 52
## rap harvey flashback compares accused
## 51 51 51 51 50
## tweets run dumb winfrey game
## 50 50 50 49 49
## white nfler mlk rapper liberals
## 48 48 48 47 47
## fake giving awards herpes joe
## 45 45 43 42 42
## epic vote america serena presidential
## 42 41 41 40 39
## biggest williams degeneres fk ellen
## 38 38 38 38 37
## media support scott marry liberal
## 37 37 37 37 36
# Generar y guardar una nube de palabras para las palabras más frecuentes
set.seed(100)
png(filename="imagenes/right_troll_wordcloud_1.png", width=3000, height=3000, bg = "black")
textplot_wordcloud(dfm_right_troll,
min_count = 10,
random_order = FALSE,
rotation = 0.25,
color = RColorBrewer::brewer.pal(8, "Set3"),
background = "black")
dev.off()
## png
## 2
right_troll_wordcloud_1
En el análisis de bigramas para la categoría “RightTroll”, se observa una clara inclinación hacia temas políticos y sociales específicos, evidenciando la utilización de ciertas figuras y eventos para reforzar narrativas divisivas.
La presencia repetida de “Colin Kaepernick” y “Kanye West”, junto con “Kendrick Lamar” y “Chance the Rapper”, refleja el foco en personalidades asociadas tanto con la crítica social como con el apoyo a Trump.
La mención de “Serena Williams”, “LeBron James”, y “Taylor Swift” sugiere una estrategia de focalización en celebridades que han asumido roles activos en cuestiones sociales o políticas. Este enfoque podría tener el propósito de criticar o deslegitimar sus posturas, especialmente considerando el contexto de polarización en el que operan estos trolls.
Curiosamente, Beyoncé aparece menos en este análisis comparado con el de “LeftTroll”. Esto podría indicar una selección estratégica de figuras públicas basada en su relevancia para la narrativa política que los “RightTroll” desean promover o criticar.
Los bigramas como “Donald Trump” y “AntiTrump”, reflejan directamente la polarización política, destacando tanto el apoyo como la oposición al entonces presidente. La mención de “Charlottesville” evoca el trágico evento que se convirtió en un punto crítico de debate nacional sobre el racismo, la supremacía blanca y la respuesta del presidente Trump al mismo. El aumento en la actividad de los RightTroll hacia finales de 2017, como se observó en las tendencias temporales de actividad, punto 3.4, podría estar directamente relacionado con las narrativas que surgieron después de la manifestación de Charlottesville y la respuesta de Trump. Es probable que este evento haya sido utilizado por las cuentas de trolls para amplificar el discurso divisivo y comentar la reacción de Trump desde varios ángulos.
# Crear bigramas
tokens_bigrams_right_troll <- tokens_ngrams(tokens_right_troll, n = 2)
# Crear una matriz de términos documentales para bigramas
dfm_bigrams_right_troll <- dfm(tokens_bigrams_right_troll)
# Analizar las palabras más frecuentes en bigramas
top_bigrams_right_troll <- topfeatures(dfm_bigrams_right_troll, 100)
print(top_bigrams_right_troll)
## colin_kaepernick lebron_james meryl_streep
## 351 189 143
## jimmy_fallon kanye_west taylor_swift
## 131 130 126
## lady_gaga west_remain remain_silent
## 124 86 86
## silent_unloads unloads_colin allen_west
## 86 86 81
## blame_trump trump_charlottesville celebrities_blame
## 71 71 70
## charlottesville_attack celebs_meltdown meltdown_claiming
## 70 68 68
## claiming_trump hollywood_celebs triggered_celebs
## 68 64 63
## colin_kaepernicks antitrump_rant james_calls
## 63 52 49
## famous_antitrump antitrump_singer oprah_winfrey
## 48 48 48
## wow_trump nfler_compares compares_colin
## 48 48 48
## kaepernick_mlk mlk_jr response_eminem
## 48 48 47
## perfect_tweet donald_trump singer_accused
## 47 43 42
## accused_giving giving_women women_herpes
## 42 42 42
## serena_williams ellen_degeneres grandmas_play
## 37 37 36
## play_epic epic_game game_kill
## 36 36 36
## kill_marry marry_fk fk_featuring
## 36 36 36
## featuring_famous breaking_famous celebs_biggest
## 36 31 30
## biggest_purveyors purveyors_fake fake_news
## 30 30 30
## trump_supporter puerto_rico harvey_weinstein
## 28 27 27
## calls_trump celebs_emmys presidential_run
## 26 26 26
## eminem_calls bash_trump degeneres_declares
## 26 25 25
## declares_trump calls_president trump_voters
## 25 25 25
## gun_control celebrities_lives kid_rock
## 25 25 25
## claims_oprah james_woods lol_ellen
## 25 24 24
## trump_dangerous breaking_unhinged unhinged_lebron
## 24 24 24
## president_bum trump_lebron lol_pelosi
## 24 24 24
## pelosi_butchers butchers_hell hell_colin
## 24 24 24
## lol_video video_dems dems_claim
## 24 24 24
## claim_lebron james_president voters_uneducated
## 24 24 24
## winfrey_hints hints_presidential gaga_tweets
## 24 24 24
## tweets_dumb dumb_theory theory_trump
## 24 24 24
## trump_ignores ignores_puerto lowinfo_celebs
## 24 24 24
## celebs_hypocritical hypocritical_meltdowns meltdowns_gun
## 24 24 24
## photoshop_master
## 24
# Generar y guardar una nube de palabras para las palabras más frecuentes
set.seed(100)
png(filename="imagenes/right_troll_wordcloud_2.png", width=3000, height=3000, bg = "black")
textplot_wordcloud(dfm_bigrams_right_troll,
min_count = 10,
random_order = FALSE,
rotation = 0.25,
color = RColorBrewer::brewer.pal(8, "Set3"),
background = "black")
dev.off()
## png
## 2
right_troll_wordcloud_2
Colin Kaepernick y LeBron James siguen sobresaliendo, con 351 y 189 menciones respectivamente, lo que subraya cómo estas figuras deportivas, conocidas por sus posturas políticas y sociales, son frecuentemente citadas en debates sobre patriotismo, activismo y justicia racial.
La mención a “Charlottesville” sigue siendo significativa, mostrandose en varios bigramas. Los bigramas “blame Trump” y “Charlottesville attack” pueden reflejar intentos de criticar la reacción de Trump o de utilizar el evento para fomentar narrativas divisivas.
El análisis revela un uso estratégico de bigramas como “remain silent”, “silent unloads”, y “unloads Colin”, que podrían estar enfocados en criticar la percepción de hipocresía o inacción de ciertas celebridades ante temas controversiales, o en subrayar la activa participación de algunas en debates políticos.
“Antitrump rant”, “famous antitrump”, y “presidential run” resaltan cómo se utilizan estas plataformas para abordar directamente la oposición a Trump, resaltando las críticas de celebridades a su administración o especulaciones sobre posibles candidaturas contra él. La aparició de “antitrump_singer” también es interesante ya que muchas celebridades, sobretodo los que hicieron más eco fueron cantantes, estaban en contra de trump y trump hizo muchos comentarios sobre los ataques que recibía.
# Crear bigramas y trigramas
tokens_ngrams_left_troll <- tokens_ngrams(tokens_left_troll, n = 2:3)
# Crear una matriz de términos documentales para los n-gramas
dfm_ngrams_left_troll <- dfm(tokens_ngrams_left_troll)
# Analizar las palabras más frecuentes en n-gramas
top_ngrams_left_troll <- topfeatures(dfm_ngrams_left_troll, 200)
print(top_ngrams_left_troll)
## colin_kaepernick kanye_west
## 367 246
## kendrick_lamar chance_rapper
## 245 192
## serena_williams lebron_james
## 149 141
## taylor_swift dave_chappelle
## 83 62
## lady_gaga alicia_keys
## 56 56
## women_natural hair_beyonce
## 56 56
## super_bowl natural_hair
## 56 55
## women_natural_hair natural_hair_beyonce
## 55 55
## famous_dex beyonce_black
## 51 47
## black_panthers donald_trump
## 44 43
## beyonce_told beyonce_dancers
## 43 43
## black_panther meryl_streep
## 41 39
## kid_kendrick kid_kendrick_lamar
## 38 38
## announced_tour red_lobster
## 38 37
## told_red lobster_save
## 36 36
## save_money money_tour
## 36 36
## tour_tickets beyonce_told_red
## 36 36
## told_red_lobster red_lobster_save
## 36 36
## lobster_save_money save_money_tour
## 36 36
## money_tour_tickets world_tour
## 36 36
## kim_kardashian beyonce_jay
## 36 31
## dancers_dressed dressed_black
## 30 30
## beyonce_dancers_dressed dancers_dressed_black
## 30 30
## dressed_black_panthers oprah_winfrey
## 30 30
## black_celebrities beyonce_halftime
## 30 29
## tax_returns water_flint
## 28 28
## lil_wayne halftime_distraction
## 28 28
## distraction_notice notice_game
## 28 28
## game_fixed beyonce_halftime_distraction
## 28 28
## halftime_distraction_notice distraction_notice_game
## 28 28
## notice_game_fixed beyonce_announced
## 28 27
## tour_forget forget_water
## 27 27
## beyonce_announced_tour announced_tour_forget
## 27 27
## tour_forget_water forget_water_flint
## 27 27
## panther_party black_panther_party
## 26 26
## police_brutality party_super
## 25 25
## beyonce_black_panther panther_party_super
## 25 25
## party_super_bowl michael_jackson
## 25 24
## beyonce_brought beyonce_backup
## 24 24
## backup_dancers dancers_black
## 24 24
## beyonce_backup_dancers ft_lil
## 24 24
## hillary_clinton backup_dancers_black
## 23 23
## chris_martin brought_music
## 23 23
## music_people people_fit
## 23 23
## fit_love love_bit
## 23 23
## beyonce_brought_music brought_music_people
## 23 23
## music_people_fit people_fit_love
## 23 23
## fit_love_bit beyonce_coming
## 23 22
## ft_kendrick ft_kendrick_lamar
## 22 22
## playing_famous playing_famous_dex
## 22 22
## paying_homage running_president
## 21 21
## beyonce_beyonce type_beat
## 21 20
## dj_khaled black_celebs
## 19 19
## lol_beyonce beyonce_lowkey
## 19 18
## lowkey_paying homage_late
## 18 18
## late_michael beyonce_lowkey_paying
## 18 18
## lowkey_paying_homage paying_homage_late
## 18 18
## homage_late_michael late_michael_jackson
## 18 18
## black_people jimmy_fallon
## 18 18
## beyonce_formation coming_tax
## 18 17
## beyonce_coming_tax coming_tax_returns
## 17 17
## tour_commercial commercial_super
## 17 17
## bowl_sunday sunday_beyonce
## 17 17
## beyonce_running president_fired
## 17 17
## fired_management management_team
## 17 17
## team_campaign campaign_staff
## 17 17
## world_tour_commercial tour_commercial_super
## 17 17
## commercial_super_bowl super_bowl_sunday
## 17 17
## bowl_sunday_beyonce sunday_beyonce_running
## 17 17
## beyonce_running_president running_president_fired
## 17 17
## president_fired_management fired_management_team
## 17 17
## management_team_campaign team_campaign_staff
## 17 17
## kardashian_kanye kim_kardashian_kanye
## 17 17
## kardashian_kanye_west beyonce_fell
## 17 17
## fell_bitches bitches_trippin
## 17 17
## beyonce_fell_bitches fell_bitches_trippin
## 17 17
## national_anthem jay_beyonce
## 17 16
## world_famous ellen_degeneres
## 16 16
## drip_walk lil_yachty
## 16 16
## ft_lil_yachty lol_beyonce_told
## 16 16
## support_colin famous_people
## 15 15
## hair_beyonce_beyonce colin_kaepernicks
## 15 15
## justin_bieber kendrick_lamars
## 15 15
## african_american beyonce_concert
## 15 15
## social_media support_colin_kaepernick
## 14 14
## famous_black white_people
## 14 14
## fighting_justice black_power
## 14 13
## yeezy_boost grand_slam
## 13 13
## beyonce_performing blended_family
## 13 12
## playing_kid playing_kid_kendrick
## 12 12
## michelle_obama angelina_jolie
## 12 12
## bruno_shades shades_beyonce
## 12 12
## warrior_game bruno_shades_beyonce
## 12 12
## sneak_upstairs upstairs_catch
## 12 12
## catch_ol ol_lady
## 12 12
## lady_practicing practicing_beyonce
## 12 12
## beyonce_fall sneak_upstairs_catch
## 12 12
## upstairs_catch_ol catch_ol_lady
## 12 12
## ol_lady_practicing lady_practicing_beyonce
## 12 12
## practicing_beyonce_fall martin_wearing
## 12 12
# Preparación y ajuste de modelos de temas
time1 <- Sys.time()
# Ajustar la matriz de términos documentales
quant_dfm_trimmed <- dfm_trim(dfm_ngrams_left_troll, min_termfreq = 10)
# Ajustar el modelo LDA
set.seed(100)
if (require(topicmodels)) {
lda_fit <- LDA(convert(quant_dfm_trimmed, to = "topicmodels"), k = 6)
terms(lda_fit, 5)
}
## Topic 1 Topic 2 Topic 3
## [1,] "kendrick_lamar" "tax_returns" "colin_kaepernick"
## [2,] "serena_williams" "beyonce_backup" "chance_rapper"
## [3,] "taylor_swift" "backup_dancers" "lebron_james"
## [4,] "women_natural" "dancers_black" "alicia_keys"
## [5,] "hair_beyonce" "beyonce_backup_dancers" "famous_dex"
## Topic 4 Topic 5 Topic 6
## [1,] "kanye_west" "super_bowl" "beyonce_told"
## [2,] "dave_chappelle" "beyonce_dancers" "red_lobster"
## [3,] "lady_gaga" "beyonce_black" "told_red"
## [4,] "donald_trump" "dancers_dressed" "lobster_save"
## [5,] "meryl_streep" "dressed_black" "save_money"
time2 <- Sys.time()
print(time2 - time1)
## Time difference of 4.602401 secs
# Crear una nube de palabras para cada tema del modelo LDA
lda_terms_matrix <- lda_fit@beta
class(lda_terms_matrix)
## [1] "matrix" "array"
dim(lda_terms_matrix)
## [1] 6 370
colnames(lda_terms_matrix) <- lda_fit@terms
# Establecer el archivo de salida para la nube de palabras
png(file="imagenes/LEFTTROLLS_ngrams_wordcloud.png",
width=3600, height=3000, res=300, bg="black")
# Configurar el layout para visualizar múltiples gráficos en una sola imagen
par(mfrow=c(2, 3))
# Iterar a través de cada tema en la matriz de términos del modelo LDA
for (k in 1:6) {
topic_terms <- lda_terms_matrix[k, ]
d <- data.frame(word = names(topic_terms), rank= rank(topic_terms))
d <- d[order(-d$rank),]
d$freq <- d$rank - max(d$rank) + 100
pal2 <- RColorBrewer::brewer.pal(11, "Spectral")
wordcloud(d$word, d$freq, scale=c(1.2, 0.05), max.words=200, random.order=FALSE, rot.per=0, colors=pal2, random.color=TRUE)
title(main=paste("Tema", k), font=10, col.main="yellow")
}
# Cerrar el dispositivo de gráficos para guardar la imagen
dev.off()
## png
## 2
LEFTTROLLS_ngrams_wordcloud
La visualización de los temas a partir de bigramas y trigramas de la categoría “LeftTroll” revela distintos focos de interés y estrategias narrativas empleadas.
Tema 1: Concentra frases alrededor de “donald_trump”, lo que sugiere un enfoque crítico hacia el entonces presidente. La mención de “red_lobster” y “beyonce_told” podría estar vinculada a discusiones sobre la cultura y el entretenimiento, potencialmente satirizando a figuras públicas o eventos.
Tema 2: Incluye referencias a “beyonce_black” y “black_panther”, lo cual indica una conversación activa sobre representación racial y posiblemente discusiones sobre el éxito cinematográfico y cultural de “Black Panther”. “super_bowl” y “panther_party” sugieren discusiones sobre eventos deportivos importantes y celebraciones culturales.
Tema 3: Destacan los n-gramas “beyonce_halftime”, “announced_tour”, y “water_flint”, lo que apunta a temas de entretenimiento mezclados con asuntos de justicia social y crisis de salud pública, como la crisis del agua en Flint, Michigan.
Tema 4: Se centra en figuras individuales con gran cantidad de menciones, como “kanye_west” y “kendrick_lamar”, enfocándose en su música y posible influencia social. La repetición de términos como “black celebs” y “black women” en este conjunto sugiere que las discusiones no son solo sobre entretenimiento, sino que también tocan puntos más profundos de representación y justicia social.
Tema 5: Parece abordar el papel de las mujeres en la sociedad y en los medios, con énfasis en “serena_williams”, “lebron_james” (aunque es hombre, se le podría relacionar con temas de igualdad y justicia social), “women_natural” y “hair_beyonce”, lo que podría reflejar conversaciones sobre belleza natural y estándares sociales.
Tema 6: Se centra principalmente en los deportes y la justicia social con términos como “colin_kaepernick”, “chance_rapper” y “taylor_swift”. La mención de “running president” junto a “fired management” y la presencia de “hillary_clinton” sugiere la exploración de temas relacionados con las campañas presidenciales y los altos mandos políticos, posiblemente discutiendo los cambios políticos y las consecuencias de las elecciones. La repetición de “president fired” puede insinuar debates sobre destituciones o controversias en la gestión del gobierno.
Tema 6: Este tema destaca por su enfoque en la política y la justicia social, destacando la figura de “colin_kaepernick”, cuya protesta durante el himno nacional lo colocó en el centro del debate sobre la justicia racial. La inclusión de “chance_rapper” y “taylor_swift” sugiere una discusión sobre el papel de los famosos en la activación y apoyo de causas sociales y políticas.
# Crear bigramas y trigramas para RightTroll
tokens_ngrams_right_troll <- tokens_ngrams(tokens_right_troll, n = 2:3)
# Crear una matriz de términos documentales para los n-gramas de RightTroll
dfm_ngrams_right_troll <- dfm(tokens_ngrams_right_troll)
# Analizar las palabras más frecuentes en n-gramas de RightTroll
top_ngrams_right_troll <- topfeatures(dfm_ngrams_right_troll, 200)
print(top_ngrams_right_troll)
## colin_kaepernick lebron_james
## 351 189
## meryl_streep jimmy_fallon
## 143 131
## kanye_west taylor_swift
## 130 126
## lady_gaga west_remain
## 124 86
## remain_silent silent_unloads
## 86 86
## unloads_colin west_remain_silent
## 86 86
## remain_silent_unloads silent_unloads_colin
## 86 86
## unloads_colin_kaepernick allen_west
## 86 81
## allen_west_remain blame_trump
## 81 71
## trump_charlottesville blame_trump_charlottesville
## 71 71
## celebrities_blame charlottesville_attack
## 70 70
## celebrities_blame_trump trump_charlottesville_attack
## 70 70
## celebs_meltdown meltdown_claiming
## 68 68
## claiming_trump celebs_meltdown_claiming
## 68 68
## meltdown_claiming_trump hollywood_celebs
## 68 64
## triggered_celebs triggered_celebs_meltdown
## 63 63
## colin_kaepernicks antitrump_rant
## 63 52
## james_calls lebron_james_calls
## 49 49
## famous_antitrump antitrump_singer
## 48 48
## famous_antitrump_singer oprah_winfrey
## 48 48
## wow_trump nfler_compares
## 48 48
## compares_colin kaepernick_mlk
## 48 48
## mlk_jr nfler_compares_colin
## 48 48
## compares_colin_kaepernick colin_kaepernick_mlk
## 48 48
## kaepernick_mlk_jr response_eminem
## 48 47
## perfect_tweet donald_trump
## 47 43
## singer_accused accused_giving
## 42 42
## giving_women women_herpes
## 42 42
## antitrump_singer_accused singer_accused_giving
## 42 42
## accused_giving_women giving_women_herpes
## 42 42
## serena_williams ellen_degeneres
## 37 37
## grandmas_play play_epic
## 36 36
## epic_game game_kill
## 36 36
## kill_marry marry_fk
## 36 36
## fk_featuring featuring_famous
## 36 36
## grandmas_play_epic play_epic_game
## 36 36
## epic_game_kill game_kill_marry
## 36 36
## kill_marry_fk marry_fk_featuring
## 36 36
## fk_featuring_famous breaking_famous
## 36 31
## celebs_biggest biggest_purveyors
## 30 30
## purveyors_fake fake_news
## 30 30
## hollywood_celebs_biggest celebs_biggest_purveyors
## 30 30
## biggest_purveyors_fake purveyors_fake_news
## 30 30
## trump_supporter puerto_rico
## 28 27
## harvey_weinstein calls_trump
## 27 26
## celebs_emmys presidential_run
## 26 26
## eminem_calls bash_trump
## 26 25
## degeneres_declares declares_trump
## 25 25
## ellen_degeneres_declares degeneres_declares_trump
## 25 25
## calls_president trump_voters
## 25 25
## gun_control celebrities_lives
## 25 25
## kid_rock claims_oprah
## 25 25
## james_woods lol_ellen
## 24 24
## trump_dangerous lol_ellen_degeneres
## 24 24
## declares_trump_dangerous breaking_unhinged
## 24 24
## unhinged_lebron president_bum
## 24 24
## breaking_unhinged_lebron unhinged_lebron_james
## 24 24
## james_calls_president calls_president_bum
## 24 24
## trump_lebron wow_trump_lebron
## 24 24
## trump_lebron_james lol_pelosi
## 24 24
## pelosi_butchers butchers_hell
## 24 24
## hell_colin lol_pelosi_butchers
## 24 24
## pelosi_butchers_hell butchers_hell_colin
## 24 24
## hell_colin_kaepernicks lol_video
## 24 24
## video_dems dems_claim
## 24 24
## claim_lebron james_president
## 24 24
## lol_video_dems video_dems_claim
## 24 24
## dems_claim_lebron claim_lebron_james
## 24 24
## lebron_james_president voters_uneducated
## 24 24
## james_calls_trump calls_trump_voters
## 24 24
## trump_voters_uneducated winfrey_hints
## 24 24
## hints_presidential oprah_winfrey_hints
## 24 24
## winfrey_hints_presidential hints_presidential_run
## 24 24
## gaga_tweets tweets_dumb
## 24 24
## dumb_theory theory_trump
## 24 24
## trump_ignores ignores_puerto
## 24 24
## lady_gaga_tweets gaga_tweets_dumb
## 24 24
## tweets_dumb_theory dumb_theory_trump
## 24 24
## theory_trump_ignores trump_ignores_puerto
## 24 24
## ignores_puerto_rico lowinfo_celebs
## 24 24
## celebs_hypocritical hypocritical_meltdowns
## 24 24
## meltdowns_gun lowinfo_celebs_hypocritical
## 24 24
## celebs_hypocritical_meltdowns hypocritical_meltdowns_gun
## 24 24
## meltdowns_gun_control photoshop_master
## 24 24
## master_hilariously hilariously_photoshops
## 24 24
## photoshops_celebrities photoshop_master_hilariously
## 24 24
## master_hilariously_photoshops hilariously_photoshops_celebrities
## 24 24
## photoshops_celebrities_lives famous_rapper
## 24 24
## rapper_arrested arrested_custody
## 24 24
## custody_alleged alleged_rape
## 24 24
## breaking_famous_rapper famous_rapper_arrested
## 24 24
## rapper_arrested_custody arrested_custody_alleged
## 24 24
## custody_alleged_rape juanita_broaddrick
## 24 24
## broaddrick_takes takes_lethal
## 24 24
## lethal_shot shot_meryl
## 24 24
## streep_clintons juanita_broaddrick_takes
## 24 24
## broaddrick_takes_lethal takes_lethal_shot
## 24 24
## lethal_shot_meryl shot_meryl_streep
## 24 24
## meryl_streep_clintons cringe_video
## 24 24
## video_eminem eminem_antitrump
## 24 24
# Preparación y ajuste de modelos de temas para RightTroll
time1 <- Sys.time()
# Ajustar la matriz de términos documentales de RightTroll
quant_dfm_trimmed <- dfm_trim(dfm_ngrams_right_troll, min_termfreq = 10)
# Ajustar el modelo LDA para RightTroll
set.seed(100)
if (require(topicmodels)) {
lda_fit_right <- LDA(convert(quant_dfm_trimmed, to = "topicmodels"), k = 6)
terms(lda_fit_right, 5)
}
## Topic 1 Topic 2 Topic 3
## [1,] "kanye_west" "colin_kaepernick" "celebs_meltdown"
## [2,] "colin_kaepernick" "jimmy_fallon" "meltdown_claiming"
## [3,] "nfler_compares" "lebron_james" "claiming_trump"
## [4,] "compares_colin" "wow_trump" "celebs_meltdown_claiming"
## [5,] "kaepernick_mlk" "donald_trump" "meltdown_claiming_trump"
## Topic 4 Topic 5 Topic 6
## [1,] "blame_trump" "taylor_swift" "meryl_streep"
## [2,] "trump_charlottesville" "lebron_james" "west_remain"
## [3,] "blame_trump_charlottesville" "lady_gaga" "remain_silent"
## [4,] "celebrities_blame" "james_calls" "silent_unloads"
## [5,] "charlottesville_attack" "lebron_james_calls" "unloads_colin"
time2 <- Sys.time()
print(time2 - time1)
## Time difference of 4.262943 secs
# Crear una nube de palabras para cada tema del modelo LDA para RightTroll
lda_terms_matrix_right <- lda_fit_right@beta
# Establecer los nombres de las columnas como los términos del modelo LDA de RightTroll
colnames(lda_terms_matrix_right) <- lda_fit_right@terms
# Configurar el archivo de salida y el layout para la nube de palabras de RightTroll
png(file="imagenes/RIGHTTROLLS_ngrams_wordcloud.png", width=3600, height=3000, res=300, bg="black")
par(mfrow=c(2, 3))
# Iterar a través de cada tema en la matriz de términos del modelo LDA para RightTroll
for (k in 1:6) {
topic_terms <- lda_terms_matrix_right[k, ]
d <- data.frame(word = names(topic_terms), rank= rank(topic_terms))
d <- d[order(-d$rank),]
d$freq <- d$rank - max(d$rank) + 100
pal2 <- RColorBrewer::brewer.pal(11, "Spectral")
wordcloud(d$word, d$freq, scale=c(1.0, 0.05), max.words=200, random.order=FALSE, rot.per=0, colors=pal2, random.color=TRUE)
title(main=paste("Tema", k), font=10, col.main="yellow")
}
# Cerrar el dispositivo de gráficos para guardar la imagen
dev.off()
## png
## 2
RIGHTTROLLS_ngrams_wordcloud
Tema 1: Se destaca un enfoque significativo en el activismo de Colin Kaepernick y las reacciones ante el incidente de Charlottesville, con términos como “blame_trump” y “trump_charlottesville”. El bigrama “celebrities_blame” sugiere que las figuras públicas han responsabilizado a Trump por su manejo del evento, mientras que “black_woman_dumb” podría representar una narrativa despectiva. La constante mención de Eminem, especialmente en contextos antitrump como “eminem_rapped_black” y “antitrump_eminem”, indica la explotación de las posturas políticas de las celebridades para reforzar la retórica divisiva.
Tema 2: Aquí, los términos como “presidential_run” y las frecuentes referencias a Kaepernick reflejan la atención a las figuras que se destacaron durante las elecciones presidenciales y los debates políticos nacionales, probablemente subrayando tanto las candidaturas como los desafíos a la autoridad presidencial.
Tema 3: Se observa un enfoque en el escándalo de Harvey Weinstein y su impacto en la cultura de Hollywood, con expresiones como “joked_weinstein_sexual”, “oscars_joked_weinstein”, y “weinstein_sexual_predator”. Este tema puede reflejar discusiones sobre el abuso sexual y el poder en la industria del entretenimiento, así como el nacimiento del movimiento #MeToo.
Tema 4: Este conjunto de palabras parece girar en torno a las reacciones de las celebridades y las acusaciones contra “harvey_weinstein”. El tema también destaca la crítica social y las respuestas a estas acusaciones, como se ve en “ellen_degeneres_declares”, “jimmy_fallon”, y “oprah_claims”. Las combinaciones “trump_ignores_puerto_rico” y “tweets_dumb” podrían reflejar críticas hacia la administración Trump y su manejo de crisis, así como una percepción negativa de la retórica en las redes sociales.
Tema 5: La presencia de términos como “antitrump_bandwagon” sugiere críticas a las actitudes anti-Trump y la exploración de cómo la sociedad y las celebridades responden y se alinean en contra de sus políticas o declaraciones.
Tema 6: Con la mención de “allen_west_remain” y “remain_silence”, este tema parece concentrarse en la expectativa de pronunciamientos políticos y la crítica a quienes eligen no hablar sobre temas importantes, destacando la presión y la crítica hacia aquellos que permanecen en silencio frente a la injusticia o la controversia política.
El análisis de los tokens más destacados en nuestro dataset podemos intuir que la publicación de estos tweets fuerse probablemente para causar discusión y debate en Twitter. Para profundizar en la comprensión del impacto emocional y el peso de estos temas, vamos a llevar a cabo un Análisis de Sentimientos, esencial para evaluar no solo el contenido explícito sino también la subjetividad y la influencia potencial de estos mensajes en el clima político de ese entonces.
# Cargar el conjunto de datos de LeftTroll
load("conjunto_datos/datos_left_troll.rda")
# Añadir un identificador único a cada tweet en el conjunto de datos de LeftTroll
datos_left_troll <- datos_left_troll %>%
mutate(tweet_id = row_number())
# Dividir los tweets en palabras y crear un conjunto de datos 'tidy'
ds_tweets_tidy <- datos_left_troll %>%
unnest_tokens(word, content)
# Realizar un análisis de sentimientos en los tweets
tweets_sentiment <- ds_tweets_tidy %>%
inner_join(get_sentiments("afinn"), by = "word") %>%
inner_join(datos_left_troll %>% select(tweet_id, content), by = "tweet_id") %>%
group_by(doc_id = tweet_id) %>%
summarise(
sentiment = sum(value),
text = first(content)
) %>%
ungroup() %>%
arrange(sentiment)
# Mostrar los resultados
View(tweets_sentiment)
# Crear el gráfico de barras (histograma) para visualizar la distribución del sentimiento
ggplot(data = tweets_sentiment, aes(x = sentiment)) +
geom_histogram(binwidth = 1, color = 'darkslategray', fill = 'steelblue') +
xlab("Puntuación de Sentimiento") +
ylab("Cantidad de Tweets") +
ggtitle("Distribución de Sentimientos en Tweets")
La distribución de la puntuación de sentimientos para los tweets
clasificados como LeftTroll revela una tendencia interesante hacia las
emociones neutras a ligeramente positivas, con una prominente
concentración alrededor del valor cero. Sin embargo, también observamos
una mayor cantidad de tweets con sentimientos positivos lo que sugiere
expresiones de apoyo o afirmación. Esta distribución podría indicar una
táctica de comunicación que, si bien incluye críticas o desacuerdos,
también enfatiza mensajes de solidaridad o aprobación.
Procederemos a analizar los textos de algunos tweets para comprender mejor los contextos y temas específicos que están impulsando estas reacciones:
LeftTroll_Negative_Sentiment
LeftTroll_Negative_Sentiment
Los temas principales abordados en los tweets negativos reflejan críticas fuertes y lenguaje agresivo centrado en figuras públicas y eventos sociales:
LeftTroll_Positive_Sentiment
Por contraste, los sentimientos positivos reflejados en la muestra de tweets son indicativos de admiración, respeto y celebración de figuras culturales y logros. Aquí hay una visión general destacada:
Colin Kaepernick es aclamado como un jugador inspirador y valiente, lo que sugiere una valoración positiva de su activismo y el efecto que ha tenido en el discurso público, especialmente en relación con la justicia social y la equidad racial.
Serena Williams es alabada por su triunfo en el Australian Open, destacando el reconocimiento a su excepcional habilidad en el tenis y su estatus como un ícono en el deporte, lo que también tiene resonancia en discusiones sobre empoderamiento femenino y superación de barreras raciales.
Beyoncé es mencionada de manera positiva, especialmente con referencia a su álbum “Lemonade”.
LeBron James es objeto de felicitaciones y buenos deseos, subrayando su influencia tanto en el baloncesto como en su activismo fuera de la cancha, incluyendo su trabajo en el campo de la educación y los derechos civiles.
Kanye West y Taylor Swift aparecen en contextos que, aunque a veces humorísticos, como las menciones junto a Trump, generalmente mantienen un tono positivo,.
# Cargar el conjunto de datos previamente filtrado
load("conjunto_datos/datos_filtrados_celebridades.rda")
# Crear un corpus solo con el contenido de los tweets de LeftTroll
trolls <- corpus(datos_filtrados_celebridades$content[
datos_filtrados_celebridades$account_category == "LeftTroll"])
# Asignar fechas de publicación a los documentos en el corpus como metadatos
docvars(trolls, "Fecha") <- datos_filtrados_celebridades$publish_date[datos_filtrados_celebridades$account_category == "LeftTroll"]
# Tokenizar el corpus
toks_trolls <- tokens(trolls)
# Aplicar un diccionario de análisis de sentimientos al corpus tokenizado
toks_trolls_lsd <- tokens_lookup(toks_trolls, dictionary = data_dictionary_LSD2015[1:2])
# Crear una matriz de términos documentales y agruparla por día
dfmat_gov_lsd <- dfm(toks_trolls_lsd) %>%
dfm_group(groups = Fecha)
# Crear un gráfico de líneas mostrando la evolución de las frecuencias a lo largo del tiempo
matplot(dfmat_gov_lsd$Fecha,
dfmat_gov_lsd,
type = "l",
lty = 1,
col = 1:2,
ylab = "Frequency",
xlab = "")
grid()
legend("topleft",
col = 1:2,
legend = colnames(dfmat_gov_lsd),
lty = 1,
bg = "white")
# Filtrar por la categoría LeftTroll y el rango de fechas especificado
filtered_data <- subset(datos_filtrados_celebridades,
account_category == "LeftTroll" &
publish_date >= as.Date("2016-01-01") &
publish_date <= as.Date("2016-12-31"))
# Crear un corpus solo con el contenido de los tweets de LeftTroll
trolls_corpus <- corpus(filtered_data$content,
docvars = data.frame(Fecha = as.Date(filtered_data$publish_date)))
# Tokenizar el corpus
toks_trolls <- tokens(trolls_corpus)
# Aplicar un diccionario de análisis de sentimientos al corpus tokenizado
toks_trolls_lsd <- tokens_lookup(toks_trolls, dictionary = data_dictionary_LSD2015[1:2])
# Crear una matriz de términos documentales
dfmat_lsd <- dfm(toks_trolls_lsd)
# Agrupar la matriz de términos documentales por fecha
dfmat_lsd_filtered <- dfm_group(dfmat_lsd, groups = docvars(toks_trolls, "Fecha"))
fechas_presentes <- docvars(dfmat_lsd_filtered, "Fecha")
# Graficar utilizando fechas_presentes
matplot(as.Date(fechas_presentes),
as.matrix(dfmat_lsd_filtered),
type = "l",
lty = 1,
ylab = "Frecuencia",
xlab = "Fecha 2016")
title("Frecuencia de Sentimientos a lo Largo del Tiempo para 'LeftTroll'")
grid()
legend("topleft",
legend = colnames(dfmat_lsd_filtered),
col = 1:2,
lty = 1,
)
Las dos gráficas presentan la distribución de sentimientos negativos y positivos a lo largo del tiempo, basada en los tweets de la categoría ‘LeftTroll’. La primera gráfica muestra la tendencia durante varios años, mientras que la segunda se centra en el año 2016, destacado por ser el año de las elecciones presidenciales de Estados Unidos, un período de intensa actividad política y social.
En la gráfica general, se observa una fluctuación constante entre sentimientos positivos y negativos a lo largo del tiempo, con picos que podrían corresponder a eventos específicos que generaron una gran cantidad de discusiones en Twitter. Los picos negativos pueden indicar respuestas a eventos controvertidos o desfavorables, mientras que los picos positivos podrían reflejar momentos de apoyo comunitario o reacciones a eventos positivos.
La segunda gráfica, que se centra en 2016, refleja con más detalle las fluctuaciones en la respuesta emocional de los usuarios durante un año particularmente polarizado. Vemos picos significativos en los sentimientos tanto positivos como negativos, lo que sugiere una respuesta intensa a los eventos de ese año. Estos podrían estar relacionados con las campañas electorales, debates, resultados de las elecciones y otros incidentes políticos o sociales significativos que captaron la atención pública.
El pico observado a inicios de octubre de 2016 en las gráficas podría atribuirse a varios eventos políticos cruciales. En esa época, las tensiones políticas en Estados Unidos alcanzaron niveles altos debido a la cercanía de las elecciones presidenciales. Específicamente, el 7 de octubre, se reveló un video de “Access Hollywood” con Donald Trump realizando comentarios vulgares sobre las mujeres. Esta filtración provocó un intenso debate público y una oleada de críticas, no solo en los medios tradicionales sino también en las plataformas sociales como Twitter. La atención aumentó considerablemente tanto de detractores como de defensores, generando una amplia gama de expresiones emocionales que podrían explicar el aumento de sentimientos registrados en Twitter, reflejo de la polarización y la pasión política del momento.
# Cargar el conjunto de datos de LeftTroll
load("conjunto_datos/datos_right_troll.rda")
# Añadir un identificador único a cada tweet en el conjunto de datos de LeftTroll
datos_right_troll <- datos_right_troll %>%
mutate(tweet_id = row_number())
# Dividir los tweets en palabras y crear un conjunto de datos 'tidy'
ds_tweets_tidy <- datos_right_troll %>%
unnest_tokens(word, content)
# Realizar un análisis de sentimientos en los tweets
tweets_sentiment <- ds_tweets_tidy %>%
inner_join(get_sentiments("afinn"), by = "word") %>%
inner_join(datos_right_troll %>% select(tweet_id, content), by = "tweet_id") %>%
group_by(doc_id = tweet_id) %>%
summarise(
sentiment = sum(value),
text = first(content)
) %>%
ungroup() %>%
arrange(sentiment)
# Mostrar los resultados
View(tweets_sentiment)
# Crear el gráfico de barras (histograma) para visualizar la distribución del sentimiento
ggplot(data = tweets_sentiment, aes(x = sentiment)) +
geom_histogram(binwidth = 1, color = 'darkslategray', fill = 'steelblue') +
xlab("Puntuación de Sentimiento") +
ylab("Cantidad de Tweets") +
ggtitle("Distribución de Sentimientos en Tweets")
La gráfica que representa la distribución de sentimientos en los tweets categorizados como RightTroll destaca una preponderancia de sentimientos negativos, evidenciada por una agrupación sustancial de tweets con puntuaciones menores a cero. No obstante, también es notable la presencia de sentimientos positivos, con picos que podrían reflejar episodios de conformidad o respaldo dentro de un marco general de comentarios adversos.
Procederemos a analizar los textos de algunos tweets para comprender mejor los contextos y temas específicos que están impulsando estas reacciones:
RightTroll_Negative_Sentiment
La gráfica que presenta los tweets clasificados como “RightTroll” con sentimiento negativo exhibe una gama de temas punzantes que invitan a un examen más detallado:
RightTroll_Positive_Sentiment
RightTroll_Positive_Sentiment
Observando las imágenes proporcionadas para los tweets con sentimiento positivo clasificados como “RightTroll”, estos son los temas y contextos más destacados:
Eminem y Taylor Swift: La atención está puesta en la reacción de ciertas celebridades a la política, específicamente en el caso de Eminem olvidando letras durante un acto crítico hacia Trump. Esta situación es ridiculizada, lo que revela una tendencia a menospreciar las posturas críticas de figuras del entretenimiento hacia el presidente, mostrando un claro sesgo a favor de la narrativa pro-Trump.
Serena Williams: Resalta el reconocimiento y la celebración de los logros de Serena Williams en el deporte, lo que muestra un apoyo transversal a figuras públicas que, independientemente de su posición política, son vistas como íconos en sus respectivos campos.
Apoyo a Decisiones Políticas: Hay tweets que muestran apoyo a las decisiones políticas de figuras conservadoras, criticando la oposición y las protestas lideradas por Colin Kaepernick, lo cual alinea con la narrativa conservadora y muestra un apoyo a las políticas y posiciones de Trump.
LeBron James: La mención repetida de LeBron James en un contexto positivo podría sugerir una valoración favorable de sus acciones o declaraciones, posiblemente aquellas que puedan alinearse con o resuenan positivamente entre los seguidores conservadores.
Celebración de Logros y Éxitos: En general, los tweets con alta puntuación de sentimiento positivo tienden a celebrar éxitos y logros de varias figuras públicas, ya sea en el contexto del deporte, la música, o la política. Esto refleja una selección estratégica de temas que fortalecen la narrativa y los valores del grupo identificado como RightTroll.
# Cargar el conjunto de datos previamente filtrado
load("conjunto_datos/datos_filtrados_celebridades.rda")
# Crear un corpus solo con el contenido de los tweets de RightTroll
trolls <- corpus(datos_filtrados_celebridades$content[
datos_filtrados_celebridades$account_category == "RightTroll"])
# Asignar fechas de publicación a los documentos en el corpus como metadatos
docvars(trolls, "Fecha") <- datos_filtrados_celebridades$publish_date[datos_filtrados_celebridades$account_category == "RightTroll"]
# Tokenizar el corpus
toks_trolls <- tokens(trolls)
# Aplicar un diccionario de análisis de sentimientos al corpus tokenizado
toks_trolls_lsd <- tokens_lookup(toks_trolls, dictionary = data_dictionary_LSD2015[1:2])
# Crear una matriz de términos documentales y agruparla por día
dfmat_gov_lsd <- dfm(toks_trolls_lsd) %>%
dfm_group(groups = Fecha)
# Crear un gráfico de líneas mostrando la evolución de las frecuencias a lo largo del tiempo
matplot(dfmat_gov_lsd$Fecha,
dfmat_gov_lsd,
type = "l",
lty = 1,
col = 1:2,
ylab = "Frequency",
xlab = "")
grid()
legend("topleft",
col = 1:2,
legend = colnames(dfmat_gov_lsd),
lty = 1,
bg = "white")
# Filtrar por la categoría RightTroll y el rango de fechas especificado
filtered_data <- subset(datos_filtrados_celebridades,
account_category == "RightTroll" &
publish_date >= as.Date("2017-06-01") &
publish_date <= as.Date("2017-12-31"))
# Crear un corpus solo con el contenido de los tweets de RightTroll
trolls_corpus <- corpus(filtered_data$content,
docvars = data.frame(Fecha = as.Date(filtered_data$publish_date)))
# Tokenizar el corpus
tokens_trolls <- tokens(trolls_corpus)
# Aplicar un diccionario de análisis de sentimientos al corpus tokenizado
tokens_trolls_lsd <- tokens_lookup(tokens_trolls, dictionary = data_dictionary_LSD2015[1:2])
# Crear una matriz de términos documentales (dfm)
dfm_trolls_lsd <- dfm(tokens_trolls_lsd)
# Agrupar el dfm por la variable docvar de fecha creada anteriormente
dfm_trolls_grouped <- dfm_group(dfm_trolls_lsd, groups = docvars(trolls_corpus, "Fecha"))
# Obtener las fechas de los documentos del dfm agrupado
dates <- as.Date(docnames(dfm_trolls_grouped))
# Convertir dfm en una matriz para el plot
dfm_matrix <- as.matrix(dfm_trolls_grouped)
# Crear la gráfica con matplot
matplot(dates,
dfm_matrix,
type = "l",
lty = 1,
col = 1:2,
xlab = "Fecha 2017",
ylab = "Frecuencia",
main = "Frecuencia de Sentimientos a lo Largo del Tiempo para 'RightTroll'")
grid()
legend("topright",
legend = colnames(dfm_trolls_grouped),
col = 1:2,
lty = 1)
Las dos gráficas muestran la distribución de sentimientos negativos y positivos en los tweets categorizados como ‘RightTroll’. La primera ofrece una visión a largo plazo que abarca varios años, mientras que la segunda se enfoca en el año 2017, destacando períodos de especial actividad o eventos relevantes.
En la visión general, hay una predominancia clara de sentimientos negativos sobre los positivos, indicando una tendencia de las cuentas ‘RightTroll’ hacia un discurso más crítico o confrontativo en Twitter. Los picos en la gráfica pueden estar vinculados a reacciones a eventos políticos, culturales o sociales específicos, reflejando la rápida movilización de opiniones en la plataforma.
El gráfico detallado de 2017 muestra fluctuaciones considerables en la respuesta emocional, con un notable pico de sentimientos negativos a mediados de julio de 2017. Durante esa época, se estaba debatiendo intensamente la derogación y reemplazo de la Ley de Cuidado de Salud a Bajo Precio (Obamacare) en el Congreso de los Estados Unidos, lo que generó muchas discusiones polarizadas y emocionales en todo el país. Además, fue un verano marcado por tensiones políticas crecientes y preparativos para las manifestaciones de Charlottesville que ocurrirían en agosto, donde las divisiones nacionales se manifestaron de forma muy visible y violenta.
En este estudio, hemos explorado cómo las cuentas de Twitter clasificadas como ‘RightTroll’ y ‘LeftTroll’ han utilizado las figuras de celebridades para lo que suponemos que era su intención de influir en el discurso público durante períodos claves, como las elecciones presidenciales de EE.UU. y otros eventos sociopolíticos importantes. A través del análisis de texto, la minería de tópicos y el modelado de temas, se ha evidenciado que estas cuentas han dirigido su enfoque hacia celebridades específicas y temas controversiales para amplificar la división y discusión.
Dinámica del Discurso: El análisis ha demostrado que las cuentas ‘LeftTroll’ tienden a enfocarse en temas de justicia social, derechos civiles y figuras políticas de izquierda, mientras que las cuentas ‘RightTroll’ suelen promover narrativas conservadoras y criticar a figuras públicas por sus posturas progresistas. Ambas usan tácticas de apropiación de la fama y la influencia de las celebridades para potenciar mensajes específicos y resonar en sus respectivas audiencias.
Patrones de Comunicación: Las cuentas categorizadas como ‘LeftTroll’ destacan por enfocarse en figuras como Beyoncé, Colin Kaepernick y Kanye West, conectando su presencia en el discurso público con temas predominantes como la justicia social y los movimientos de derechos civiles. Estas cuentas parecen promover un diálogo que resalta el activismo y la responsabilidad social de las celebridades, utilizando su influencia para resonar y movilizar opiniones en torno a asuntos progresistas. Ejemplos notables incluyen la mención frecuente de Kaepernick en el contexto de su protesta y el apoyo a Beyoncé, reflejando la valoración positiva de su activismo cultural y social.
Por el contrario, las cuentas ‘RightTroll’ se enfocan en construir una narrativa más crítica hacia las figuras públicas y sus posturas políticas. La atención a eventos como los sucesos de Charlottesville y las críticas hacia las posturas anti-Trump, especialmente en el caso de celebridades como Eminem o Taylor Swift, sugieren un esfuerzo por cuestionar y confrontar las opiniones que contravienen la ideología conservadora. Estas cuentas también se centraron en la figura de Donald Trump, tanto en apoyo como en crítica a la oposición que él enfrentaba, y en cómo las celebridades interactuaban con estos temas políticos.
En ambas categorías, términos como ‘Charlottesville’, ‘Kaepernick’, ‘West’, ‘Beyoncé’, y ‘anti-Trump’ emergen como núcleos temáticos recurrentes, indicando la tendencia a utilizar la influencia y visibilidad de las celebridades para dirigir la conversación pública y, posiblemente, para provocar polarización. A través de la repetición y la focalización en estos términos y figuras públicas, las cuentas de trolls buscan amplificar su alcance y la respuesta emocional del público.
Impacto Emocional: A través del análisis de sentimientos, se ha descubierto una predominancia de sentimientos negativos en las cuentas ‘RightTroll’, reflejando una estrategia de confrontación y crítica. Por otro lado, los ‘LeftTroll’ han demostrado una mezcla de sentimientos negativos y positivos, lo que podría indicar un enfoque más equilibrado que combina crítica con apoyo a sus causas.
Eventos Específicos y Movilización: La distribución temporal de la publicación de los tweets, el contenido de estos y el analisis de sentimientos muestra picos que corresponden a eventos políticos, como las elecciones y las manifestaciones de Charlottesville, subrayando cómo las cuentas de trolls se activan durante momentos de alta tensión para amplificar las narrativas divisivas.
Las acciones de las cuentas ‘RightTroll’ y ‘LeftTroll’ parecen reflejar una intención deliberada de polarizar el debate público y de influir en la opinión pública. El aprovechamiento de figuras públicas y la respuesta a eventos actuales parece que demuestran una estrategia orquestada para utilizar las redes sociales como un terreno de influencia.